﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using SGAEntidades;
using SGABDUtil;
using SGAInterfaces;

namespace SGAAccesoDatos
{
    public class EquipoTelefonico : IEquipoTelefonico
    {
        #region Miembros de IEquipoTelefonico

        public bool Registrar(EquipoTelefonicoInfo oEquipoTelefonico)
        {
            var sqlParm = new SqlParameter[7];

            using (var con = new SqlConnection(SqlHelper.ConnectionStringDistributedTransaction))
            {
                con.Open();
                var trx = con.BeginTransaction(IsolationLevel.ReadCommitted);

                try
                {
                    sqlParm[0] = new SqlParameter("@Nro_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.NroTelefono != null) { sqlParm[0].Value = oEquipoTelefonico.NroTelefono; } else { sqlParm[0].Value = DBNull.Value; }

                    sqlParm[1] = new SqlParameter("@Nro_Rpm", SqlDbType.VarChar);
                    if (oEquipoTelefonico.NroRpm != null) { sqlParm[1].Value = oEquipoTelefonico.NroRpm; } else { sqlParm[1].Value = DBNull.Value; }

                    sqlParm[2] = new SqlParameter("@Imei", SqlDbType.VarChar);
                    if (oEquipoTelefonico.Imei != null) { sqlParm[2].Value = oEquipoTelefonico.Imei; } else { sqlParm[2].Value = DBNull.Value; }

                    sqlParm[3] = new SqlParameter("@Id_Marca_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.IdMarcaTelefono != null) { sqlParm[3].Value = oEquipoTelefonico.IdMarcaTelefono; } else { sqlParm[3].Value = DBNull.Value; }

                    sqlParm[4] = new SqlParameter("@Id_Modelo_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.IdModeloTelefono != null) { sqlParm[4].Value = oEquipoTelefonico.IdModeloTelefono; } else { sqlParm[4].Value = DBNull.Value; }

                    sqlParm[5] = new SqlParameter("@Id_Estado_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.IdEstadoTelefono != null) { sqlParm[5].Value = oEquipoTelefonico.IdEstadoTelefono; } else { sqlParm[5].Value = DBNull.Value; }

                    sqlParm[6] = new SqlParameter("@Usuario_Sistema", SqlDbType.VarChar);
                    if (oEquipoTelefonico.UsuarioSistema != null) { sqlParm[6].Value = oEquipoTelefonico.UsuarioSistema; } else { sqlParm[6].Value = DBNull.Value; }

                    SqlHelper.ExecuteNonQuery(trx, CommandType.StoredProcedure, "SGA_SP_REGISTRAR_EQUIPO_TELEFONICO",
                                              sqlParm);
                    trx.Commit();
                }
                catch (Exception)
                {
                    trx.Rollback();
                    return false;
                }
                finally
                {
                    con.Close();
                }
            }
            return true;
        }

        public bool Actualizar(EquipoTelefonicoInfo oEquipoTelefonico)
        {
            var sqlParm = new SqlParameter[7];

            using (var con = new SqlConnection(SqlHelper.ConnectionStringDistributedTransaction))
            {
                con.Open();
                var trx = con.BeginTransaction(IsolationLevel.ReadCommitted);

                try
                {
                    sqlParm[0] = new SqlParameter("@Nro_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.NroTelefono != null) { sqlParm[0].Value = oEquipoTelefonico.NroTelefono; } else { sqlParm[0].Value = DBNull.Value; }

                    sqlParm[1] = new SqlParameter("@Nro_Rpm", SqlDbType.VarChar);
                    if (oEquipoTelefonico.NroRpm != null) { sqlParm[1].Value = oEquipoTelefonico.NroRpm; } else { sqlParm[1].Value = DBNull.Value; }

                    sqlParm[2] = new SqlParameter("@Imei", SqlDbType.VarChar);
                    if (oEquipoTelefonico.Imei != null) { sqlParm[2].Value = oEquipoTelefonico.Imei; } else { sqlParm[2].Value = DBNull.Value; }

                    sqlParm[3] = new SqlParameter("@Id_Marca_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.IdMarcaTelefono != null) { sqlParm[3].Value = oEquipoTelefonico.IdMarcaTelefono; } else { sqlParm[3].Value = DBNull.Value; }

                    sqlParm[4] = new SqlParameter("@Id_Modelo_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.IdModeloTelefono != null) { sqlParm[4].Value = oEquipoTelefonico.IdModeloTelefono; } else { sqlParm[4].Value = DBNull.Value; }

                    sqlParm[5] = new SqlParameter("@Id_Estado_Telefono", SqlDbType.VarChar);
                    if (oEquipoTelefonico.IdEstadoTelefono != null) { sqlParm[5].Value = oEquipoTelefonico.IdEstadoTelefono; } else { sqlParm[5].Value = DBNull.Value; }

                    sqlParm[6] = new SqlParameter("@Usuario_Sistema", SqlDbType.VarChar);
                    if (oEquipoTelefonico.UsuarioSistema != null) { sqlParm[6].Value = oEquipoTelefonico.UsuarioSistema; } else { sqlParm[6].Value = DBNull.Value; }

                    SqlHelper.ExecuteNonQuery(trx, CommandType.StoredProcedure, "SGA_SP_ACTUALIZAR_EQUIPO_TELEFONICO",
                                              sqlParm);
                    trx.Commit();
                }
                catch (Exception)
                {
                    trx.Rollback();
                    return false;
                }
                finally
                {
                    con.Close();
                }
            }
            return true;
        }

        public IList<EquipoTelefonicoInfo> Listar(EquipoTelefonicoInfo oEquipoTelefonico)
        {
            var sqlParm = new SqlParameter[5];
            var oListaEquipoTelefonico = new List<EquipoTelefonicoInfo>();

            sqlParm[0] = new SqlParameter("@Nro_Telefono", SqlDbType.VarChar);
            if (oEquipoTelefonico.NroTelefono != null) { sqlParm[0].Value = oEquipoTelefonico.NroTelefono; } else { sqlParm[0].Value = DBNull.Value; }

            sqlParm[1] = new SqlParameter("@Nro_Rpm", SqlDbType.VarChar);
            if (oEquipoTelefonico.NroRpm != null) { sqlParm[1].Value = oEquipoTelefonico.NroRpm; } else { sqlParm[1].Value = DBNull.Value; }

            sqlParm[2] = new SqlParameter("@Imei", SqlDbType.VarChar);
            if (oEquipoTelefonico.Imei != null) { sqlParm[2].Value = oEquipoTelefonico.Imei; } else { sqlParm[2].Value = DBNull.Value; }

            sqlParm[3] = new SqlParameter("@Id_Marca_Telefono", SqlDbType.VarChar);
            if (oEquipoTelefonico.IdMarcaTelefono != null) { sqlParm[3].Value = oEquipoTelefonico.IdMarcaTelefono; } else { sqlParm[3].Value = DBNull.Value; }

            sqlParm[4] = new SqlParameter("@Id_Modelo_Telefono", SqlDbType.VarChar);
            if (oEquipoTelefonico.IdModeloTelefono != null) { sqlParm[4].Value = oEquipoTelefonico.IdModeloTelefono; } else { sqlParm[4].Value = DBNull.Value; }

            using (
                var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction,
                                                  CommandType.StoredProcedure, "SGA_SP_CONSULTAR_EQUIPO_TELEFONICO", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        while (drd.Read())
                        {
                            oListaEquipoTelefonico.Add(
                                new EquipoTelefonicoInfo(drd.GetString(0).Trim(), drd.GetString(1).Trim(), drd.GetString(2).Trim(),
                                    drd.GetString(3).Trim(), new MarcaTelefonoInfo(drd.GetString(3).Trim(), drd.GetString(4).Trim()),
                                    drd.GetString(5).Trim(), new ModeloTelefonoInfo(drd.GetString(5).Trim(), null, drd.GetString(6).Trim(), null, null, null),
                                    drd.GetString(7).Trim(), new EstadoTelefonoInfo(drd.GetString(7).Trim(), drd.GetString(8).Trim()), null
                                ));
                        }
                    }
                }
            }
            return oListaEquipoTelefonico;
        }

        public EquipoTelefonicoInfo Consultar(EquipoTelefonicoInfo oEquipoTelefonico)
        {
            var sqlParm = new SqlParameter[5];
            var oEntEquipoTelefonico = new EquipoTelefonicoInfo();

            sqlParm[0] = new SqlParameter("@Nro_Telefono", SqlDbType.VarChar);
            if (oEquipoTelefonico.NroTelefono != null) { sqlParm[0].Value = oEquipoTelefonico.NroTelefono; } else { sqlParm[0].Value = DBNull.Value; }

            sqlParm[1] = new SqlParameter("@Nro_Rpm", SqlDbType.VarChar);
            if (oEquipoTelefonico.NroRpm != null) { sqlParm[1].Value = oEquipoTelefonico.NroRpm; } else { sqlParm[1].Value = DBNull.Value; }

            sqlParm[2] = new SqlParameter("@Imei", SqlDbType.VarChar);
            if (oEquipoTelefonico.Imei != null) { sqlParm[2].Value = oEquipoTelefonico.Imei; } else { sqlParm[2].Value = DBNull.Value; }

            sqlParm[3] = new SqlParameter("@Id_Marca_Telefono", SqlDbType.VarChar);
            if (oEquipoTelefonico.IdMarcaTelefono != null) { sqlParm[3].Value = oEquipoTelefonico.IdMarcaTelefono; } else { sqlParm[3].Value = DBNull.Value; }

            sqlParm[4] = new SqlParameter("@Id_Modelo_Telefono", SqlDbType.VarChar);
            if (oEquipoTelefonico.IdModeloTelefono != null) { sqlParm[4].Value = oEquipoTelefonico.IdModeloTelefono; } else { sqlParm[4].Value = DBNull.Value; }

            using (
                var drd = SqlHelper.ExecuteReader(SqlHelper.ConnectionStringDistributedTransaction,
                                                  CommandType.StoredProcedure, "SGA_SP_CONSULTAR_EQUIPO_TELEFONICO", sqlParm))
            {
                if (drd != null)
                {
                    if (drd.HasRows)
                    {
                        drd.Read();
                        oEntEquipoTelefonico =
                            new EquipoTelefonicoInfo(drd.GetString(0).Trim(), drd.GetString(1).Trim(), drd.GetString(2).Trim(),
                                drd.GetString(3).Trim(), new MarcaTelefonoInfo(drd.GetString(3).Trim(), drd.GetString(4).Trim()),
                                drd.GetString(5).Trim(), new ModeloTelefonoInfo(drd.GetString(5).Trim(), null, drd.GetString(6).Trim(), null, null, null),
                                drd.GetString(7).Trim(), new EstadoTelefonoInfo(drd.GetString(7).Trim(), drd.GetString(8).Trim()), null
                            );
                    }
                }
            }

            return oEntEquipoTelefonico;
        }

        #endregion
    }
}
